home *** CD-ROM | disk | FTP | other *** search
- Q32837 Bad Code Generated when Accessing Data in the Code Segment
- C Compiler
- 5.10 | 5.10
- MS-DOS | OS/2
-
- Summary:
- The C compiler generates incorrect code for a program that accesses
- data in the code segment. It "forgets" that the data is in a far
- segment and tries to access it with a near (16-bit) pointer.
- A workaround to the problem is to compile with the optimizer
- disabled (/Od).
- Microsoft has confirmed this to be a problem in Version 5.10. We
- are researching this problem and will post new information as it
- becomes available.
-
- More Information:
- The following is the program that demonstrates the problem,
- along with the generated code; it is compiled in medium model:
-
- extern void far SomeProc();
-
- main()
- {
- typedef struct {
- char patch;
- } TEMPLATE;
-
- TEMPLATE far *lpSomeProc;
-
- lpSomeProc = (TEMPLATE far *)SomeProc; /* point pointer into code segment*/
- lpSomeProc->patch = 123; /* Bad code generated for this statement */
- } /* when optimizer used */
-
- /*
- ;BAD CODE:
- ; Line 11
- mov WORD PTR [bp-4],OFFSET _SomeProc ;lpSomeProc
- mov WORD PTR [bp-2],SEG _SomeProc
- ; Line 12
- mov BYTE PTR _SomeProc,123 <== THIS IS INCORRECT; A NEAR PTR
-
-
- ;GOOD CODE: (produced with -Od option)
- ; Line 11
- mov WORD PTR [bp-4],OFFSET _SomeProc ;lpSomeProc
- mov WORD PTR [bp-2],SEG _SomeProc
- ; Line 12
- les bx,DWORD PTR [bp-4] ;lpSomeProc
- mov BYTE PTR es:[bx],123 <== THIS IS CORRECT; A FAR PTR
- ; Line 13
- */
-
-
-
- Keywords: buglist5.10 tar78670
- Updated 88/07/29 12:16
-